package cn.doitedu.javase.calculate_engine.commons;

import com.alibaba.fastjson2.JSON;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.RandomStringUtils;

import java.util.HashMap;
import java.util.Scanner;


public class Utils {

    private Scanner scanner;

    public void enableScanner(){
        this.scanner = new Scanner(System.in);
    }



    public void printParamErrorInfo(){
        System.err.println("缺少参数!"); // err表示 "标准错误输出"（unix系统中的术语，代表一个console的通道，常用于输出错误信息）
        System.err.println("至少要传递一个参数: 1,表示随机生成数据"); // err表示 "标准错误输出"（unix系统中的术语，代表一个console的通道，常用于输出错误信息）
        System.err.println("至少要传递一个参数: 2,表示从控制台接收数据"); // err表示 "标准错误输出"（unix系统中的术语，代表一个console的通道，常用于输出错误信息）
    }

    public void mainParamCheck(String args[]){
        if(args.length < 1 ){
            printParamErrorInfo();
            System.exit(1);
        }else{
            String p = args[0];
            if( ! (p.equals("1")  || p.equals("2"))  ){
                printParamErrorInfo();
                System.exit(2);
            }
        }

    }


    /**
     * 生成一条随机数据的 用户行为事件 json
     * @return
     */
    public String generateRandomJson(){

        // 构造一个封装数据的javabean
        EventBean eventBean = new EventBean();

        // 填充各字段
        eventBean.setUser_id(RandomUtils.nextInt(1,1000));
        eventBean.setEvent_id(RandomStringUtils.randomAlphanumeric(5).toLowerCase());
        eventBean.setAction_time(System.currentTimeMillis());

        HashMap<String, Integer> properties = new HashMap<>();
        properties.put("k1",RandomUtils.nextInt(100,500));
        properties.put("k2",RandomUtils.nextInt(100,500));
        properties.put("k3",RandomUtils.nextInt(100,500));

        eventBean.setProperties(properties);


        // 将填充好数据的对象，转成json字符串
        return JSON.toJSONString(eventBean);
    }


    public String getJsonFromConsole(){
        if(scanner == null) {
            throw new RuntimeException("调用 getJsonFromConsole方法之前,请先调用 enableScanner");
        }

        return scanner.nextLine();
    }


}
